import Axios from 'axios'
import { ElMessage, ElMessageBox } from 'element-plus';

import { Session } from './storage';


// 基础api 暂时不设置基础api 我们留到 api/index.ts 内去设置
// const baseURL = 'https://api.github.com'


// 配置新建一个 axios 实例
const axios = Axios.create({
  // baseURL,
  timeout: 20000, // 请求超时 20s
  withCredentials: true,
  headers: { 'Content-Type': 'application/json' },
})

// 请求拦截器（发起请求之前的拦截）
axios.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么 token
    if (Session.get('token')) {
      config.headers['Authorization'] = `${Session.get('token')}`;
    }

    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器（获取到响应时的拦截）
axios.interceptors.response.use(
  (response) => {
    /**
     * 根据你的项目实际情况来对 response 和 error 做处理
     * 这里对 response 和 error 不做任何处理，直接返回
     */
    const res = response.data;
    if (!res.success) {
      //401.Token 过期了
      if (res.code === 401 || res.code === 4001) {
        //! Do someThing

        Session.clear(); // 清除浏览器全部临时缓存
        window.location.href = '/'; // 去登录页 或者做点什么
        ElMessageBox.alert('你已被登出，请重新登录', '提示', {})
          .then(() => { })
          .catch(() => { });
      } else {
        console.error(res)
      }
      return Promise.resolve(response.data)
    }
    return response.data
  },
  (error) => {
    // 对响应错误做点什么
    if (error.response && error.response.data) {
      const code = error.response.status
      const msg = error.response.data.message
      ElMessage.error(`Code: ${code}, Message: ${msg}`)
      console.error(`[Axios Error]`, error.response)
    } else {
      ElMessage.error(`${error}`)
    }
    return Promise.reject(error)
  }
)

export default axios
